<?php
/*********************************************************************\
*  Copyright (c) 1998-2013, TH. All Rights Reserved.
*  Author :linsuchuan
*  FName  :base.php
*  Time   :2017年7月11日18:20:18
*  Remark :微信基础类
\*********************************************************************/
class weixin_base{
	private $appid;
	private $appsecret;
	private $key;

	public function __construct(){
		$this->key = 'weixin_accesstoken';
		$this->appid = app::get('b2c')->getConf('weixin.push.appid');
        $this->appsecret = app::get('b2c')->getConf('weixin.push.appsecret');
	}

	/**
	 * ps ：从session中获取accesstoken,如果没有则向微信服务器发起请求
	 * Time：2016/08/22 16:09:18
	 * @author liuxin
	 * @param 参数类型
	 * @return 返回值类型
	*/
	private function _get_accesstoken(){
		base_kvstore::instance('weixin')->fetch('basic_accesstoken_', $accesstoken);
		if(!$accesstoken){
			$accesstoken = $this -> _reset_accesstoken();
		}
		return $accesstoken;
	}

	/**
	 * ps ：向微信服务器发起请求获取accesstoken
	 * Time：2017年7月17日15:53:02
	 * @author linsuchuan
	 * @param 参数类型
	 * @return 返回值类型
	*/
	private function _reset_accesstoken(){
		if($this->appid && $this->appsecret){
			//请求url地址
			$appId = $this->appid;
			$appSecret = $this->appsecret;
			$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
			//初始化curl
			$ch = curl_init($url);
			//设置参数
			curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳过证书验证
 			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 从证书中检查SSL加密算法是否存在
			//调用接口
			$response = curl_exec($ch);
			if(curl_errno($ch)){
			    var_dump(curl_error($ch));
			}
			//关闭curl
			curl_close($ch);
			$response = json_decode($response,1);
			$accesstoken = $response['access_token'];
			base_kvstore::instance('weixin')->store('basic_accesstoken_', $accesstoken, $response['expires_in']);
			return $accesstoken;
		}else{
			return false;
		}
	}
	/**
	 * ps ：发送模板消息
	 * Time：2017年7月13日17:06:01
	 * @author lsc
	 * @param temp_id	string    模板ID
	 * @param params	array     模板变量，格式为['keyword1'=>'test','keyword2'=>'test1',...]
	 * @return 返回值类型
	*/
	public function sendTempleteMsg($temp_id,$params,$openid,$ret_url){
		$accesstoken = $this->_get_accesstoken();
        if($openid){
			$url = "http://api.weixin.qq.com/cgi-bin/message/template/send?access_token={$accesstoken}";
			$postData = array(
				'touser' => $openid,
				'template_id' => $temp_id,
				'data' => $params
			);
			$postData = json_encode($postData);
			$http = kernel::single('base_httpclient');
        	$response = $http->post($url, $postData);
			if($response['errcode'] === 0){
			}elseif($response['errcode'] == '40001'){
				return $this -> sendTempleteMsg($temp_id,$params,$openid,$ret_url,$accesstoken);
			}else{
				// return ['status'=>'fail','msg'=>$response['errormsg'],'msgid'=>$response['msgid']];
			}
		}
	}
}